﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Aeroporto.modelo;
using System.Data;
using Npgsql;

namespace Aeroporto.bd
{
    class TrechoDAO : GenericDAO
    {
        public bool update_dados(TrechoModel trecho)
        {
            try
            {
                string sql = "update trecho set sigla_comp = '" + trecho.SiglaComp + "', num_voo = '" + trecho.NumVoo + "', origem = '" + trecho.OrigemT + "', destino = '" + trecho.DestinoT + "', horario = '" + trecho.HorarioTrecho + "', seg = " + trecho.Segunda + ", ter = " + trecho.Terca + ", qua = " + trecho.Quarta + ", qui = " + trecho.Quinta + ", sex = " + trecho.Sexta + ", sab = " + trecho.Sabado + ", dom = " + trecho.Domingo + " where id_trecho = " + trecho.IDTrecho;
                Arquivo.escrever(sql);
                Conexao.consulta_2(sql);
                return true;
            }
            catch(NpgsqlException e)
            {
                Arquivo.escrever(e.ToString());
                throw e;
            }            
        }

        /**
         * Busca no banco de dados os valores a serem listados no grid  
         **/
        new public DataTable lista_dados(String tabela)
        {
            try
            {
                string sql = "select * from " + tabela + " where sigla_comp = '" + Arquivo.ler(@"C:\TEMP\companhia_logada.txt") + "'";
                Arquivo.escrever(sql);
                NpgsqlCommand command = new NpgsqlCommand(sql, Conexao.getConexao());
                NpgsqlDataAdapter da = new NpgsqlDataAdapter();
                da.SelectCommand = command;
                DataTable dt = new DataTable();
                da.Fill(dt);
                return dt;
            }
            catch (Exception erro)
            {
                throw erro;
            }
        }

        /**
        * Realiza busca no banco de dados
         **/
        new public DataTable pesquisar(string tabela, string coluna, string nome)
        {
            try
            {
                string sql = "select * from " + tabela + " where upper(" + coluna + ") like '%" + nome.ToUpper() + "%'" + " and sigla_comp = " + Arquivo.ler(@"C:\TEMPcompanhia_logada.txt");
                NpgsqlCommand command = new NpgsqlCommand(sql, Conexao.getConexao());
                NpgsqlDataAdapter da = new NpgsqlDataAdapter();
                da.SelectCommand = command;
                DataTable dt = new DataTable();
                da.Fill(dt);
                return dt;
            }
            catch (Exception erro)
            {
                throw erro;
            }
        }

        /**
        * Realiza busca no banco de dados
         **/
        public DataTable pesquisar(string aeroporto, string sigla_comp)
        {
            try
            {
                string sql = "select * from trecho where sigla_comp = '" + sigla_comp + "'" + " and (upper(destino) like '%" + aeroporto.ToUpper() + "%'" + " or upper(origem) like '%" + aeroporto.ToUpper() + "%')";
                Arquivo.escrever(sql);
                NpgsqlCommand command = new NpgsqlCommand(sql, Conexao.getConexao());
                NpgsqlDataAdapter da = new NpgsqlDataAdapter();
                da.SelectCommand = command;
                DataTable dt = new DataTable();
                da.Fill(dt);
                return dt;
            }
            catch (Exception erro)
            {
                throw erro;
            }
        }

        public string add_instancia(string data, string id_trecho)
        {
            try
            {
                string sql = "insert into instancia(data_viagem, id_trecho) values('"+data+"',"+id_trecho+")";
                Arquivo.escrever(sql);
                return Conexao.consulta_2(sql);
            }
            catch (Exception erro)
            {
                throw erro;
            }
        }

        internal MyMessageBox excluir(System.Collections.ArrayList datas_viagens, string id_trecho)
        {
            MyMessageBox mb = new MyMessageBox("", "");
            for (int i = 0; i < datas_viagens.Count; i++)
            {                
                mb = excluir("delete from instancia where id_trecho = " + id_trecho+ " and data_viagem = '" + datas_viagens[i] + "'");
                if (mb.String2 == "Erro não foi removido.:")
                {
                    return mb;
                }
            }
            return mb;
        }

        public DataTable lista_trechos()
        {
            try
            {
                string sql = "select t.id_trecho, t.origem, a1.nome, a1.cidade, t.destino, a2.nome, a2.cidade from trecho t, aeroporto a1, aeroporto a2 where t.origem = a1.cod_iata and t.destino = a2.cod_iata order by t.id_trecho";            
                Arquivo.escrever(sql);
                NpgsqlCommand command = new NpgsqlCommand(sql, Conexao.getConexao());
                NpgsqlDataAdapter da = new NpgsqlDataAdapter();
                da.SelectCommand = command;
                DataTable dt = new DataTable();
                da.Fill(dt);
                return dt;
            }
            catch (Exception erro)
            {
                throw erro;
            }

        }

        internal string disponibilizar(string data, string id_trecho, string cod_aeronave)
        {
            try
            {
                string sql = "select disponibiliza_assentos_voos_instanciados(" + id_trecho + ",'" + cod_aeronave + "','" + data + "')";
                Arquivo.escrever(sql);
                return Conexao.consulta_2(sql);
            }catch(Exception erro){
                throw erro;
            }
        }
    }
}